/**
 * @file mmgr_modem.h
 * @brief 
 * @author  ()
 * @version 1.0
 * @date 2024-09-13
 * 
 * @copyright Copyright (C) 2019 Queclink Wireless Solutions (ShenZhen) Co., Ltd. All Rights Reserved.
 * 
 * @par 修改日志:
 * <table>
 * <tr><th>Date       <th>Version <th>Author  <th>Description
 * <tr><td>2024-09-13 <td>1.0     <td>     <td>内容
 * </table>
 */
#ifndef __MMGR_MODEM_H
#define __MMGR_MODEM_H

#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>

#ifdef __cplusplus
extern "C" {
#endif


#include "modem/qlmodem/task_modem.h"

#define ICCID_MAX_SIZE                  24              /* ICCID最大长度 */
#define VERSION_MAX_SIZE                50              /* 固件版本号最大长度 */
#define IMEI_MAX_SIZE                   16              /* ICCID最大长度 */
#define IMSI_MAX_SIZE                   16              /* IMSI最大长度 */

/*
 * 模块运行状态.
 */
typedef enum {
    PWRON_ING,          /* 正在开机. */
    POWERON,            /* 已经开机. */
    PWROFF_ING,         /* 正在光机. */
    POWEROFF,           /* 已经光机. */
}run_status_t;

/*
 * 控制参数.
 */
struct mmgr_cps {
    bool    		is_force_close;         			/* 是否强制关机. */
    bool            is_read_ok;                         /* 基础信息是否获取完成 */
    char    		version[VERSION_MAX_SIZE];  		/* 存储版本信息. */
    char    		iccid[ICCID_MAX_SIZE];  			/* 存储ICCID值. */
    char    		imei[IMEI_MAX_SIZE];  			    /* 存储设备IMEI值. */
    char    		imsi[IMSI_MAX_SIZE];  			    /* 存储sim卡IMSI值. */
    uint32_t 	    prm_read_timing;   					/* FCT模式下读取相关参数的开始时间,单位s. */
    run_status_t  	status;           					/* 模块运行状态. */
    char    		sub_version[VERSION_MAX_SIZE];  	/* 存储modem内部版本 */
};

#define FW_ENCRYPTION_OK    1   
#define FW_ENCRYPTION_NO    0   
int32_t qlsdk_fw_encryption_get(void);
int32_t qlsdk_fw_encryption_update(void);
int32_t qlsdk_fw_encryption_key_get(char *key, size_t len);

void mmgr_modem_init(void);
int32_t mmgr_wifi_scan_start(void);
struct wifi_info *mmgr_wifi_info_get(void);
uint8_t mmgr_wifi_count_get(void);

const char *mmgr_version_get(void);
const char *mmgr_iccid_get(void);
const char *mmgr_imei_get(void);
const char *mmgr_imsi_get(void);
bool mmgr_simcard_exist_get(void);
const char *mmgr_subversion_get(void);

void dqa_process(void);
void application_process(void);

#ifdef __cplusplus
}
#endif

#endif